package com.leyou.Service;

import com.leyou.client.BrandClient;
import com.leyou.client.CategoryClient;
import com.leyou.client.GoodsClient;
import com.leyou.client.SpecificationClient;
import com.leyou.item.pojo.*;
import com.sun.org.apache.regexp.internal.RE;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.*;

@Service
public class Goodservice {

    @Autowired
    private BrandClient brandClient;

    @Autowired
    private CategoryClient categoryClient;

    @Autowired
    private GoodsClient goodsClient;

    @Autowired
    private SpecificationClient specificationClient;


    /**
     * 用来封装商品详情页数据的方法
     * @param Spuid
     * @return
     */
    public Map<String, Object> LoadData(Long Spuid) {

        Map<String, Object> map = new HashMap<>(); // 定义所有数据

        // 根据id获取spu的信息
        Spu spu = this.goodsClient.querySpuById(Spuid);

        // 获取spu的详细信息spuDetail
        SpuDetail spuDetail = this.goodsClient.querySpuDetail(Spuid);

        // 查询sku集合
        List<Sku> skus = this.goodsClient.querySku(Spuid);

        // 查询分类信息,封装成{1:手机,2:手机通讯}这样的Map，然后封装到categories集合中。
        List<Long> cids = Arrays.asList(spu.getCid1(), spu.getCid2(), spu.getCid3());
        List<String> cidNames = this.categoryClient.queryNameByIds(cids);
        List<Map<String, Object>> categories = new ArrayList<>();

        for (int i = 0; i < cidNames.size(); i++) {
            // 每次循环创建一个map来放数据
            Map<String, Object> categoryMap = new HashMap<>();
            categoryMap.put("id", cids.get(i)); // 使用for循环的目的是得到cids的id
            categoryMap.put("name", cidNames.get(i));
            categories.add(categoryMap);
        }

        // 查询品牌
        Brand brand = this.brandClient.BrandByCidForEs(spu.getBrandId());

        // 查询规格参数组，针对目前的数据差76,tb_spec_group表下面的所有的参数
        List<SpecGroup> groups = this.specificationClient.querySpecsByCid(spu.getCid3());

        // 查询特殊的规格参数,generic为0的，也就是这些特殊的规格参数（颜色，内存，存储）
        List<SpecParam> params = this.specificationClient.queryParamsByCid(null, spu.getCid3(), false, null);

        Map<Long, String> paramsMap = new HashMap<>();
        params.forEach(param -> {
            paramsMap.put(param.getId(), param.getName());
        });

        // 查询标准的规格参数,generic为1的
        List<SpecParam> standardParams = this.specificationClient.queryParamsByCid(null, spu.getCid3(), true, null);
        Map<Long, String> standardParamsMap = new HashMap<>();
        standardParams.forEach(param -> {
            standardParamsMap.put(param.getId(), param.getName());
        });

        // 封装数据
        map.put("spu", spu);    // spu
        map.put("spuDetail", spuDetail); // spuDetail信息
        map.put("skus", skus);  // skus集合
        map.put("categories", categories); // 分类组
        map.put("brand", brand);    // 品牌
        map.put("groups", groups);  // 规格参数组
        map.put("paramsMap", paramsMap);    //特殊的规格参数（渲染购买商品商品选择信息颜色内存这些）
        map.put("standardParamsMap",standardParamsMap);  // 标准的规格参数的值（渲染详细信息）
        return map;
    }
}
